Notatki
Pokaz slajdów
Konspekt
1
Java i XML
  • Jędrzej Sobański
  • 23 marzec 2005
2
Wstęp do XML
3
Czym jest XML?
  • Skrót od eXtensible Markup Language
  • Język znaczników dla dokumentów o strukturze hierarchicznej
  • Pochodzi od SGML
  • Standard przekazywania informacji wraz z ich opisem
  • Plik tekstowy
4
Cechy poprawnego dokumentu
  • Na początku deklaracja:
  • <?xml version="1.0"?>
  • Dokument zawiera jeden element nazywany korzeniem (element główny)
  • Element może zawierać inne elementy oraz atrybuty
  • Element otoczony jest znacznikami początku <…> oraz końca </…>



5
Cechy poprawnego dokumentu (2)
  • Element pusty (nie zawierający innych elementów) można opisać jednym znacznikiem nieparzystym <…/>
  • Atrybuty elementu wymienia się w jego znaczniku, podając od razu wartość w cudzysłowie: <element attr1="val1" attr2="val2" />
  • Komentarze jak w HTML <!-- … -->
6
Cechy poprawnego dokumentu (3)
  • case sensitive
  • Sekcje CDATA
  • <![CDATA[
    Każdy <znacznik /> tutaj zostanie zignorowany.
    ]]>
7
Przykładowy dokument
  • <?xml version="1.0" encoding="utf-8"?>
  • <address_book>
  • <person status="family">
  • <firstname>Jedrzej</firstname>
  • <surname>Sobanski</surname>
  • <address>Wiatrakowa 7</address>
  • <phone>695 654 234</phone>
  • <email>sobanski@plusnet.pl</email>
  • </person>
  • <person status="business">
  • <firstname>Bartek</firstname>
  • <surname>Staszalek</surname>
  • <address>Nowodworska 12</address>
  • <phone/>
  • <email>stach@plusnet.pl</email>
  • </person>
  • </address_book>


8
Czy XML jest taki jak HTML?
  • Plik HTML 4.01 Strict:


  • <!DOCTYPE html PUBLIC „…" „…">
  • <html>
  • <head>
  • <meta http-equiv="content-type"     content=„…">
  • <title>Tabelki HTML i Style CSS</title>
  • </head>


  • <BODY>
  • <div>
  • <table border=1>
  • <tr><td></td></tr>
  • </table>
  • <br>
  • </div>
  • </body>
  • </html>
9
Co robi XML?

  • NIC!
10
Java i XML
11
Korzyści z łączenia Javy z XML


  • XML + Java = przenośne dane + przenośne programy
12
Parsowanie dokumentu za pomocą DOM
13
Co to takiego DOM?
  • DOM – Document Object Model
  • Interfejs dla parserów XML
  • Zwraca drzewo parsowanego dokumentu



14
Najważniejsze elementy interfejsu DOM
  • javax.xml.parsers.DocumentBuilderFactory – fabryka dla DocumentBuilder
  • javax.xml.parsers.DocumentBuilder – parser dokumentów
  • Org.w3c.dom.Document – reprezentuje dokument XML
  • Org.w3c.dom.Element:Node – reprezentuje element


  • Document DocumentBuilder.parse(…)


  • Element Document.getDocumentElement()


  • String Node.getNodeName()
  • String Node.getNodeValue()
  • NamedNodeMap Node.getAttributes()
  • NodeList Node.getChildNodes()
15
Aplikacja wykorzystująca DOM
  • Pobierz archiwum
16
Zawężanie dokumentów
  • Przy użyciu DTD
17
Co to takiego DTD
  • Zbiór reguł opisujących format dokumentu
  • Określa dopuszczalne elementy podrzędne i atrybuty
18
Przykład DTD
  • <!DOCTYPE TVSCHEDULE [
  • <!ELEMENT TVSCHEDULE (CHANNEL?)>
  • <!ELEMENT CHANNEL (BANNER,DAY*)>
  • <!ELEMENT BANNER (#PCDATA)>
  • <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
  • <!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
  • <!ELEMENT DESCRIPTION (#PCDATA)>


  •    ...


  • <!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
  • <!ATTLIST DESCRIPTION LANGUAGE CDATA #IMPLIED>
  • ]>
19
Parsowanie XML względem DTD
  • DocumentBuilderFactory.setValidating(true);
  • DocumentBuilderFactory. setIgnoringElementContentWhitespace(true);


  • Teraz nie trzeba będzie sprawdzać nazw elementów!!!
20
Aplikacja parsująca XML zgodny z DTD
  • Pobierz archiwum
21
Zawężanie dokumentów
  • Przy użyciu Schema
22
Różnice między DTD a Schema
  • Plik Schema jest plikiem XML
  • Można nakładać silne restrykcje na wartości (własne typy, wyrażenia regularne, typy abstrakcyjne)
  • Pozwala na różne struktury dokumentu w zależności od wartości
23
Przykład Schema
  • Pobierz plik
24
Parsowania DOM ciąg dalszy
  • Zgodnie z Schema przy użyciu Xerces
25
Kod aplikacji parsującej przez DOM zawężonego dokumentu
  • Pobierz archiwum
26
Parsowanie dokumentu za pomocą SAX
27
Czym się różni SAX od DOM
  • Generuje zdarzenia podczas przetwarzania
  • Nie pamięta całego dokumentu przy przetwarzaniu (dobre przy wielkich dokumentach)
28
Przegląd SAX API
  • javax.xml.parsers.SAXParserFactory – fabryka dla SAXParser
  • javax.xml.parsers.SAXParser – parser dokumentów
  • org.xml.sax.helpers.DefaultHandler – klasa obsługująca zdarzenia podczas parsowania


  • void SAXParser.parse(input, DefaultHandler)


  • DefaultHandler:
  • startDocument()
  • startElement(…)
  • warning(…)
  • error(…)
  • endElement(…)
  • endDocument()
  • processingInstruction(…)
29
Kod aplikacji korzystającej z SAX
  • Pobierz archiwum
30
Budowanie dokumentów w DOM
31
Elementy API do tworzenia dokumentów
  • // pusty dokument
  • Document DocumentBuilder.newDocument()
  • // dodaje element główny
  • Node Document.appendChild(Node)
  • // ustawienie/dodanie atrybutu
  • void Element.setAttribute(String, String)
  • // dodaje węzeł wewnętrzny
  • Node Node.appendChild(Node)
32
Kod aplikacji tworzącej dokument
  • Pobierz archiwum
33
XSL i XPath
34
Co to takiego XPath?
  • Pozwala poruszać się po dokumencie
  • Główny element w XSLT
  • Ogromna biblioteka funkcji
  • Bardzo podobne do ścieżek w drzewie katalogów w UNIX
  • Ponadto dodatkowy język „poruszania się” po węzłach
35
Co to takiego XSLT?
  • Określa jak interpretować dokument XML jako dokument innego formatu
  • Umożliwia przetworzenie na HTML, PDF oraz inny rodzaj XML
  • Umożliwia tworzenie informacji o danych już istniejących (zliczanie, sortowanie)
36
Przykład dokumentu XSL
  • Pobierz archiwum
37
Przetwarzanie w Javie
(JAXP - Xalan)
38
API
  • package javax.xml.transform…
  • TransformerFactory – fabryka transformerów
  • Transformer – transformer :-)
  • StreamSource – źródło transformacji (plik XSL)
  • StreamResult – cel transformacji
  • DOMSource(SAXSource) – źródło do przetransformowania
39
Aplikacja korzystająca z JAXP
  • Pobierz archiwum
40
Literatura
  • [1] C. S. Horstmann, G. Cornell; Core Java 2 - techniki zaawansowane; wydanie polskie, 2002 Helion
  • [2] http://java.sun.com
  • [3] http://w3schools.com
  • [4] http://xml.apache.org